package com.dongzili.auth.controller;

import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.dongzili.auth.UserService;
import com.dongzili.common.entity.User;
import com.dongzili.auth.vo.LoginDto;
import com.dongzili.common.mybatisplus.MybatisPlusUtil;
import com.dongzili.common.utils.BCryptUtils;
import com.dongzili.common.vo.R;
import com.dongzili.common.vo.ResponseCode;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/auth")
public class AuthController {


    /**
     * 登录接口
     * @param loginDto
     * @return
     */
    @PostMapping("/login")
    public R<?> login(@RequestBody LoginDto loginDto){

        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(User::getUsername,loginDto.getUsername());
        User user = MybatisPlusUtil.getMapper(User.class).selectOne(queryWrapper, false);
        if (user != null && BCryptUtils.checkByBCrypt(loginDto.getPassword(), user.getPassword())){
            UserService.fillUser(user);
            StpUtil.login(user.getId());
            StpUtil.getSession().set("user", user);
            return R.success(user, StpUtil.getTokenInfo().tokenValue);
        }
        return R.error(ResponseCode.USERNAME_OR_PASSWORD_ERROR);
    }

    @GetMapping("/logout")
    public R<?> logout(){
        StpUtil.logout();
        return R.success();
    }

//    /** 用户列表 */
//    @PostMapping("/list")
//    public R<?> list(@RequestBody PageRequest<User> request) {
//        LambdaQueryWrapper<User> query = new LambdaQueryWrapper<>(request.getEntity());
//        if (request.getLikeEntity() != null && StringUtils.hasText(request.getLikeEntity().getUsername())){
//            query.like(User::getUsername, request.getLikeEntity().getUsername());
//        }
//        IPage<User> pageData = MybatisPlusUtil.getMapper(User.class).selectPage(new Page<>(request.getCurrent(), request.getSize()), query);
//        UserService.fillUsers(pageData.getRecords());
//        return R.success(pageData.getRecords(), pageData.getTotal());
//    }
//
//    /** 添加用户 */
//    @PostMapping("/add")
//    public R<?> add(@RequestBody User user){
//        if (!StringUtils.hasText(user.getPassword()) || !StringUtils.hasText(user.getUsername())){
//            R.error(ResponseCode.PARAM_ERROR);
//        }
//        user.setId(null);
//        if (user.getRoleIds() == null || user.getRoleIds().isEmpty()){
//            user.setRoleIds(Collections.singletonList(1001));
//        }
//        String encryptPassword = BCryptUtils.encryptByBCrypt(user.getPassword());
//        user.setPassword(encryptPassword);
//        return R.success(MybatisPlusUtil.getMapper(User.class).insert(user));
//    }
//
//    /** 更新用户信息 */
//    @PostMapping("/update")
//    public R<?> update(@RequestBody User user){
//        if (user.getId() == null){
//            R.error(ResponseCode.PARAM_ERROR);
//        }
//        user.setPassword(null);
//        return R.success(MybatisPlusUtil.getMapper(User.class).updateById(user));
//    }
//
//    /** 更新密码 */
//    @PostMapping("/updatePwd")
//    public R<?> updatePwd(@RequestBody User user){
//        if (!StringUtils.hasText(user.getPassword())){
//            R.error(ResponseCode.PARAM_ERROR);
//        }
//        user.setId(StpUtil.getLoginIdAsInt());
//        String encryptPassword = BCryptUtils.encryptByBCrypt(user.getPassword());
//        user.setPassword(encryptPassword);
//        return R.success(MybatisPlusUtil.getMapper(User.class).updateById(user));
//    }
//
//    /** 根据id删除 */
//    @GetMapping("/delete/{id}")
//    public R<?> delete(@PathVariable("id") Integer id){
//        return R.success(MybatisPlusUtil.getMapper(User.class).deleteById(id));
//    }
}
